package br.com.monitorimoveis.comum.persistencia.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;

import br.com.monitorimoveis.comum.entidade.Bairro;
import br.com.monitorimoveis.comum.entidade.Cidade;
import br.com.monitorimoveis.comum.persistencia.IBairroDAO;

@Service
public class BairroDAO extends AbstractDAO<Bairro, Long> implements IBairroDAO {



	@SuppressWarnings("unchecked")
	public List<Bairro> pesquisarPorNome(String nomeBairro) {

		Query q = getSession().createQuery(
				" from Bairro where nome like :nomeBairro");
		q.setParameter("nomeBairro", "%" + nomeBairro + "%");

		return (List<Bairro>) q.list();
	}

	@SuppressWarnings("unchecked")
	public List<Bairro> pesquisarPorNomeExbicao(String nomeBairroExibicao) {
		Query q = getSession().createQuery(
				" from Bairro where nomeExibicao like :nomeBairroExibicao");
		q.setParameter("nomeBairroExibicao", "%" + nomeBairroExibicao + "%");

		return (List<Bairro>) q.list();
	}

	@SuppressWarnings("unchecked")
	public List<Bairro> pesquisarPorCidade(Cidade cidade) {
		Criteria criteria = getSession().createCriteria(Bairro.class);
		criteria.add(Restrictions.eq("cidade", cidade));

		return (List<Bairro>) criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<Bairro> pesquisarPorNomeCidade(String nomeBairro, Cidade cidade) {
		Criteria criteria = getSession().createCriteria(Bairro.class);
		criteria.add(Restrictions.eq("nome", nomeBairro));
		criteria.add(Restrictions.eq("cidade", cidade));
		return (List<Bairro>) criteria.list();
	}
	
	@Override
	public Bairro recuperarPorCidadeENome(Cidade cidade, String nome) {
		Criteria criteria = getSession().createCriteria(Bairro.class);
		criteria.add(Restrictions.eq("cidade", cidade));
		criteria.add(Restrictions.eq("nome", nome));
		
		return (Bairro) criteria.list().get(0);
	}

	@Override
	protected Class<?> getObjectType() {
		return Bairro.class;
	}

}
